/**
 * 质量信息管理
 */

 const state = {
  /**
   * 页面类型
   * DLR  经销商：  新增、编辑质量报告表单
   * OEM  车厂端：  审核经销商提交的质量报告表单
   */
  pageType:'DLR',
  /**
   * 表单状态：
   * readonly 只读 -> （明细 按钮）
   * add      新增 -> （新增 按钮）
   * edit     编辑 -> （编辑 按钮）
   * audit    审核 -> （审核 按钮）
   */
  editFormStatus:'readonly',
  /**
   * 选择弹窗显示 / 隐藏
   *    对象为复杂数据类型，其子属性 可进行双向绑定 列如弹窗使用【.sync】修饰符
   *       √ <BaseDialog :visible.sync="isShowDialog.car"></BaseDialog>
   *    如果为简单数据类型，直接对其进行双向绑定 会报 have no setter 错误
   *       × <BaseDialog :visible.sync="isShowDialog"></BaseDialog>
   */
  isShowDialog:{
    car:false, // 车辆选择弹窗
    part:false, // 零部件选择弹窗
    dealer:false, // 服务站选择弹窗
  },
  /**
   * 当前详情表单
   */
  curEditFormData:{},
  // 搜索vin
  searchVin:'',
  // 搜索主因配件CODE
  searchPartCode:'',
  // 搜索故障配件CODE
  searchFaultPartCode:'',
  // 搜索配件类型(2种)
  searchPartType:'', // part:主因配件   faultPart:故障配件
  // 搜索经销商
  searchDealerName:'',
  searchDealerCode:'',
  /**
   * 表单为新增状态下 赋值 需要采用合并处理的字段
   */
  mergeFileds:['curEditFormData']
};

/**
 * getters
 * https://vuex.vuejs.org/zh/guide/getters.html#getter
 */
const getters = {
  editFormStatus:state=>state.editFormStatus,
  pageType:state=>state.pageType,
  isShowDialog:state=>state.isShowDialog,
  curEditFormData:state=>state.curEditFormData,
  searchVin:state=>state.searchVin,
  searchPartCode:state=>state.searchPartCode,
  searchFaultPartCode:state=>state.searchFaultPartCode,
  searchPartType:state=>state.searchPartType,
  searchDealerName:state=>state.searchDealerName,
  searchDealerCode:state=>state.searchDealerCode,
}


/**
 * mutations
 * 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。
 * https://vuex.vuejs.org/zh/guide/mutations.html#mutation
 */
 const mutations = {
  SET_STATE_BY_NAME(state, {name,value}) {
    let tips =""
    const {mergeFileds,editFormStatus} = state
    if( editFormStatus == 'add' && mergeFileds.includes(name)){
      // 合并处理（同名参数会覆盖）
      if(value){
        tips = '合并'
        state[name] ={...state[name],...value}
      }else{
        tips = '重置'
        state[name] ={}
      }
    }else{
      state[name] = value
      tips = '赋值'
    }
  },
};

/**
  Action 类似于 mutation，不同在于：
      1.Action 提交的是 mutation，而不是直接变更状态。
      2.Action 可以包含任意异步操作。
      https://vuex.vuejs.org/zh/guide/actions.html#action
 */
const actions = {

};



export default {
  namespaced: true,
  state,
  actions,
  mutations,
  getters
};
